# -*- coding: utf-8 -*-
__author__ = 'Paul'
from five import grok
from zope import schema
from plone.directives import form
from zope.interface import Invalid
from plone.app.textfield import RichText
from plone.namedfile.field import NamedImage
from plone.namedfile.interfaces import IImageScaleTraversable
from z3c.relationfield.schema import RelationList, RelationChoice
from plone.formwidget.contenttree import ObjPathSourceBinder,ContentTreeFieldWidget

from Products.bpContents import _
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from plone.formwidget.autocomplete import AutocompleteFieldWidget
from collective.z3cform.widgets.token_input_widget import TokenInputFieldWidget
from Products.ATVocabularyManager import NamedVocabulary
from collective.gtags.field import Tags
from  plone.folder.interfaces import IOrderableFolder
from collective.plonefinder.widgets.referencewidget import FinderSelectWidget
from Products.bpContents.articulo import IArticulo
from Products.bpContents.galeria import IGaleria
from Products.bpContents.libro import ILibro
from Products.bpContents.evento import IEvento

from zope.component import getMultiAdapter
from plone.memoize.instance import memoize
from Products.ATContentTypes.interface import IATFolder
from Products.CMFDynamicViewFTI.browserdefault import BrowserDefaultMixin

from Acquisition import aq_inner,aq_parent,aq_base

from plone.directives.dexterity import DisplayForm
from Products.bpContents.BaseClassView import BaseClassView
from Products.CMFCore.utils import getToolByName




class IBookmarkFolder(form.Schema,IOrderableFolder):
    """Carpeta para gestionar bookmars"""


class View(DisplayForm,BaseClassView):
    grok.context(IBookmarkFolder)
    grok.require('zope2.View')
    maxItems=5


    def esTopBookmark(self):
        """Cab"""
        if aq_inner(self.context).title=="Favoritos":
            return True
        return False

    def dameEstructura(self):
        """Devuelve el contenido partiendo de la carpeta actual"""
        self.tieneHijoFolder=False
        result=dict()
        folderCont=self.dameHijos()

        result["titulo"]=self.context.title
        result["descri"]=self.context.description
        result["url"]=self.context.absolute_url()
        result["tipo"]=self.context.portal_type
        muestraMas=self.dameHijos()
        result["contenido"]=muestraMas[0];
        result["enlaceMas"]=muestraMas[1];

        return result

    def dameHijos(self):
        """Devuelve diccionario con los hijos"""
        result=[]
        listCarpetas=[]
        listEnlaces=[]

        query = self.context.getFolderContents()

        for item in query:
            objM=self.context.unrestrictedTraverse(item.getPath())

            paquete=self.empaqueta(item)
            if paquete["tipo"]=="Link":
                listEnlaces.append(paquete)
            elif paquete["tipo"] in ("Products.bpContents.bookmarkFolder",):
                masContenido=self.dameContenidos(objM,item.id)
                if self.tieneHijoFolder==False:
                    self.tieneHijoFolder=True
                paquete["contenido"]=masContenido[0]
                paquete["enlaceMas"]=masContenido[1]
                listCarpetas.append(paquete)

        result=listEnlaces+listCarpetas

        return result,len(result)>5


    def dameRutaRaiz(self):
        """Devuelve la ruta a la carpeta Favoritos"""

        ruta=self.context.absolute_url().split("/")
        bFlag=1
        for elem in ruta:
            posF=elem.find("favorito")
            if posF!=-1:
                return "/".join(ruta[0:bFlag])
            bFlag=bFlag+1

        return "/"




    def dameContenidos(self, obj,idPadre):
        """devuelve una lista con los objetos de una carpeta"""
        listado=[]
        query = obj.getFolderContents()
        for item in query[:self.maxItems]:
            if item.id!=idPadre:
                ##objM=self.context.unrestrictedTraverse(item.getPath())
                listado.append(self.empaqueta(item))

        return listado,len(query)>self.maxItems

    def empaqueta(self,brain):
        result=dict()
        result["titulo"]=brain.Title
        result["descri"]=brain.Description
        result["url"]=brain.getPath()
        result["tipo"]=brain.portal_type

        if brain.portal_type in ("Folder","Products.bpContents.bookmarkFolder"):
            result["content"]=[];

        if brain.portal_type == "Link":
            result["enlace"]=brain.getRemoteUrl

        return result

class bookResourceView(BaseClassView):
    grok.context(IBookmarkFolder)
    grok.require('zope2.View')
    maxItems=5

    def esRaizBookmark(self):
        """Determina si es la carpeta tope del bookmark"""
        valor= False
        if self.context.title=="Favoritos":
            valor= True
        return valor

    def dameHijos(self):
        """Devuelve diccionario con los hijos"""
        print "aaa"
        query = self.context.getFolderContents()

        for item in query:
            objM=self.context.unrestrictedTraverse(item.getPath())
            paquete=self.empaqueta(item)

            if paquete["tipo"] in ("Folder","Products.bpContents.bookmarkFolder"):
                paquete["contenido"]= self.dameContenidos(objM)

        return result

    def dameContenidos(self, obj):
        """devuelve una lista con los objetos de una carpeta"""
        listado=[]
        query = obj.getFolderContents()

        for item in query[:self.maxItems]:
            ##objM=self.context.unrestrictedTraverse(item.getPath())
            listado.append(self.empaqueta(item))

        return result

    def empaqueta(self,brain):
        result=dict()
        result["titulo"]=brain.Title
        result["descri"]=brain.Description
        result["url"]=brain.getPath()
        result["tipo"]=brain.portal_type

        if brain.portal_type in ("Folder","Products.bpContents.bookmarkFolder"):
            result["content"]=[]

        if brain.portal_type == "Link":
            result["enlace"]=brain.getRemoteUrl()

        return result